@c Introduction & acknowledgement chapters.

@node Introduction & acknowledgements

@chapter Introduction

Scheme48 is an implementation of Scheme based on a byte-code virtual
machine with design goals of simplicity and cleanliness.  To briefly
enumerate some interesting aspects of it, Scheme48 features:
@itemize @bullet
@item
an advanced module system based on Jonathan Rees's W7 security kernel
with well-integrated interaction between macros and modules;

@item
a virtual machine written in a dialect of Scheme itself, Pre-Scheme,
for which a compiler is written with Scheme48;

@item
a sophisticated, user-level, pre@"emptive multithreading system with
numerous high-level concurrency abstractions;

@item
a composable, lock-free shared-memory thread synchronization mechanism
known as @dfn{optimistic concurrency}; and

@item
an advanced user environment that is well-integrated with the module
and thread systems to facilitate very rapid development of software
systems scaling from small to large and single-threaded to
multi-threaded.
@end itemize

It was originally written by Jonathan Rees and Richard Kelsey in 1986
in response to the fact that so many Lisp implementations had started
out simple and grown to be complex monsters of projects.  It has been
used in a number of research areas, including:
@itemize @bullet
@item
mobile robots at Cornell [Donald 92];

@item
a multi-user collaboration system, sometimes known as a `MUD'
(`multi-user dungeon') or `MUSE' (`multi-user simulation environment'),
as well as general research in capability-based security [Museme; Rees
96]; and

@item
advanced distributed computing with higher-order mobile agents at NEC's
Princeton research lab [Cejtin @etal{} 95].
@end itemize

The system is tied together in a modular fashion by a configuration
language that permits quite easy mixing and matching of components, so
much so that Scheme48 can be used essentially as its own OS, as it was
in Cornell's mobile robots program, or just as easily within another,
as the standard distribution is.  The standard distribution is quite
portable and needs only a 32-bit byte-addressed POSIX system.

The name `Scheme48' commemorates the time it took Jonathan Rees and
Richard Kelsey to originally write Scheme48 on August 6th & 7th, 1986:
forty-eight hours.  (It has been joked that the system has expanded to
such a size now that it requires forty-eight hours to @emph{read} the
source.)

@section This manual

This manual begins in the form of an introduction to the usage of
Scheme48, suitable for those new to the system, after which it is
primarily a reference material, organized by subject.  Included in the
manual is also a complete reference manual for Pre-Scheme, a low-level
dialect of Scheme for systems programming and in which the Scheme48
virtual machine is written; @pxref{Pre-Scheme}.

This manual is, except for some sections pilfered and noted as such
from the official but incomplete Scheme48 reference manual, solely the
work of Taylor Campbell, on whom all responsibility for the content of
the manual lies.  The authors of Scheme48 do not endorse this manual.

@section Acknowledgements

Thanks to Jonathan Rees and Richard Kelsey for having decided so many
years ago to make a simple Scheme implementation with a clean design in
the first place, and for having worked on it so hard for so many years
(almost twenty!); to Martin Gasbichler and Mike Sperber, for having
picked up Scheme48 in the past couple years when Richard and Jonathan
were unable to work actively on it; to Jeremy Fincher for having asked
numerous questions about Scheme48 as he gathered knowledge from which
he intended to build an implementation of his own Lisp dialect, thereby
inducing me to decide to write the manual in the first place; to Jorgen
Sch@"afer, for having also asked so many questions, proofread various
drafts, and made innumerable suggestions to the manual.
